function createStore(reducer){
    //redux是单仓库，单状态
    let state;
    //当前仓库中的订阅函数的函数
    let listeners = [];
    //返回仓库中当前的状态
    function getState(){
        return state;
    }
    //当向仓库派发动的时候,会调用reducer计算新状态
    function dispatch(action){
        //把老状态和派发的动作传递给reducer,计算新状态
        state=reducer(state,action);
        //因为状态变化了，所以要通知监听所有函数执行
        listeners.forEach(l=>l());
    }
    function subscribe(listener){
        //传递一个订阅函数，放到监听 函数数组中，等状态变化的时候会依次执行
        listeners.push(listener);
        //会返回一个取消订阅的函数
        return ()=>{
            //过滤老的监听 函数数组，删除掉listener
            listeners=listeners.filter(l=>l!==listener);
        }
    }
    //为了让state获取一个初始状态，所以在内部会先派发一次 
    dispatch({type:'@@REDUX/INIT'});
    return {
        getState,//获取仓库中的状态
        dispatch,//向仓库派发动作,修改仓库状态
        subscribe//订阅仓库的状态变化监听函数，当仓库状态发生变化时执行监听函数
    }
}
export default createStore;